关于sql:ON [PRIMARY]是什么意思?

您所在的位置:网站首页 darwin primary是什么意思 关于sql:ON [PRIMARY]是什么意思?

关于sql:ON [PRIMARY]是什么意思?

2023-09-18 23:41| 来源: 网络整理| 查看: 265

我正在创建一个SQL安装脚本,并以其他人的脚本为例。 这是脚本的示例:

123456789101112131415SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[be_Categories](     [CategoryID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_be_Categories_CategoryID]  DEFAULT (newid()),     [CategoryName] [nvarchar](50) NULL,     [Description] [nvarchar](200) NULL,     [ParentID] [uniqueidentifier] NULL,  CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED (     [CategoryID] ASC )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] ) ON [PRIMARY] GO

有人知道ON [PRIMARY]命令的作用吗?

在Microsoft SQL Server中创建数据库时,可以有多个文件组,在多个位置,目录或磁盘中创建存储。可以命名每个文件组。 PRIMARY文件组是默认的文件组,始终创建该默认文件组,因此您提供的SQL在PRIMARY文件组上创建表。

有关完整的语法,请参见MSDN。

相关讨论 这也意味着它通常是无用的,可以安全地从脚本中删除。 是的,您可以通过相同的方式将变量初始化省略为0和false,因为它只是默认值,对吗? @MarkSowul除非您有充分的理由来使用它来优化性能,否则可以忽略它并让默认发生。 (因此包括了"通常"的MGOwen。)将变量初始化为0或false是关于确保代码在已知状态下运行,这是逻辑和正确性的考虑,而不是优化的考虑。 MSDN链接似乎转到了下载页面。 我在脚本中两次看到了ON PRIMARY语法-一种用于表,另一种用于表约束。在存储方面受到表约束的情况意味着什么?对我来说,这听起来无关紧要或多余。从语法上讲,在表级别仅提及一次就足够了,还是真的可以将表存储在PRIMARY文件组中,而将表约束数据存储在NON-PRIMARY文件组中? 这是实际的MSDN链接。答案中的一个不再有效,我无法编辑帖子!

它指的是您要创建的对象驻留在哪个文件组上。因此,您的主文件组可以驻留在服务器的驱动器D:上。然后,您可以创建另一个称为索引的文件组。该文件组可以驻留在服务器的驱动器E:上。

相关讨论 如果将表存储在PRIMARY文件组上并将表约束或索引数据结构存储在其他文件组上,会对性能产生负面影响吗? @RBT有很多变量可能会影响这一点,通常很多答案都将以"取决于但..."开头。请参阅dba.stackexchange.com/questions/2626/及相关问题

ON [PRIMARY]将在" Primary"文件组上创建结构。在这种情况下,主键索引和表将放置在数据库的"主"文件组中。

为Mark S.在他的帖子中提到的内容添加一个非常重要的注释。在问题中提到的特定SQL脚本中,您永远不能提及两个不同的文件组来存储数据行和索引数据结构。

之所以这样,是因为在这种情况下创建的索引是主键列上的聚集索引。聚集索引数据和表的数据行永远不能位于不同的文件组上。

因此,如果您的数据库上有两个文件组,例如然后,下面提到的PRIMARY和SECONDARY脚本将在PRIMARY文件组本身上存储行数据和聚集索引数据,即使我为表数据提到了不同的文件组([SECONDARY])。更有趣的是,脚本也可以成功运行(当我期望它给出错误时,就像我给了两个不同的文件组:P一样)。 SQL Server悄无声息地巧妙地解决了幕后的难题。

1234567891011CREATE TABLE [dbo].[be_Categories](     [CategoryID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_be_Categories_CategoryID]  DEFAULT (newid()),     [CategoryName] [nvarchar](50) NULL,     [Description] [nvarchar](200) NULL,     [ParentID] [uniqueidentifier] NULL,  CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED (     [CategoryID] ASC )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] ) ON [SECONDARY] GO

注意:仅当所创建的索引本质上非集群时,您的索引才能驻留在不同的文件组上。

当表数据已经位于[PRIMARY]文件组上时,下面的创建非聚集索引的脚本将在[SECONDARY]文件组上创建:

12345CREATE NONCLUSTERED INDEX [IX_Categories] ON [dbo].[be_Categories] (     [CategoryName] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Secondary] GO

您可以获取有关如何将非聚集索引存储在不同文件组上的更多信息,以帮助您更好地执行查询。这是一个这样的链接。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3